package d0914;
import java.io.*;

public class 流 {
    public static void main(String[] args) throws IOException {
        // 文件输出字节流, 会自动创建文件
        FileOutputStream fos = new FileOutputStream("c:/a/b/a.dat");
        // 处理流 ==> 对各种基本数据类型写操作
        DataOutputStream dos = new DataOutputStream(fos);
        // b 字节数组
        // off 从哪个字节开始
        // len 长度
        //fos.write(b, off, len); // 写数据
        // fos.flush(); // 将缓存的数据写出去 \
        try {
            //fos.write(256);
            dos.writeBoolean(true);
            dos.writeLong(123456790000l);
            dos.writeUTF("hello world");
        } finally {
            // 关闭 dos 附带关闭 fos
            dos.close();  // 流在操作完之后必须关闭
        }

        // 文件输入字节流  文件必须存在
        FileInputStream fis = new FileInputStream("c:/a/b/a.dat");
        DataInputStream dis = new DataInputStream(fis);
        try {
            // System.out.println(fis.read());
            // fis.available(); 获取流里面还有多少可以获取的字节数
            // fis.skip(n)      跳转 n 字节
            System.out.println(dis.readBoolean());
            System.out.println(dis.readLong());
            System.out.println(dis.readUTF());
        } finally {
            dis.close();  // 流在操作完之后必须关闭
        }


        System.out.println("=================== 读取字符流 ======================");

        // try (  里面定义的流, 会在try执行完之后, 不管是否出现异常, 都会关闭 )
        // JDK 1.7 新功能
        try (FileReader fr = new FileReader("D:\\_文件柜/项目扩展功能需求.txt");) {
            // 数据缓冲区, 舀水的勺子
            char[] chars = new char[100];
            // 勺子上的刻度, 记录数据的长度
            int count;
            while ((count = fr.read(chars)) > -1) {
                String s = new String(chars, 0, count);
                System.out.println(s);
            }
        }

    }
}